/*-----------------------------------------------------------------------------
 * @file   hal_led.c
 * @brief  interface for led module operations
 * @author WLH<wanglehui8357@163.com> Copyright (C) 2021~2099.
-----------------------------------------------------------------------------*/
#include "hal_led.h"
#include "board.h"

/*-----------------------------------------------------------------------------
 * marcro define
-----------------------------------------------------------------------------*/

/*-----------------------------------------------------------------------------
 * local variable
-----------------------------------------------------------------------------*/

/*-----------------------------------------------------------------------------
 * local functions
-----------------------------------------------------------------------------*/

/*-----------------------------------------------------------------------------
 * public functions
-----------------------------------------------------------------------------*/
U8 hal_led_count(void)
{
    return 2u;
}

void hal_led_init(void)
{
    /* enable the LED GPIO clock */
    rcu_periph_clock_enable(RCU_GPIOA);

    /* configure LED GPIO pin */
    gpio_mode_set(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_11);
    gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_11);

    gpio_mode_set(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_12);
    gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_12);
}

void hal_led_on(U8 led)
{
    if(led == HAL_LED0)
    {
        gpio_bit_set(GPIOA, GPIO_PIN_11);
    }
    else if(led == HAL_LED0)
    {
        gpio_bit_set(GPIOA, GPIO_PIN_12);
    }
    else if(led == HAL_LED_ALL)
    {
        gpio_bit_set(GPIOA, GPIO_PIN_11);
        gpio_bit_set(GPIOA, GPIO_PIN_12);
    }
}

void hal_led_off(U8 led)
{
    if(led == HAL_LED0)
    {
        gpio_bit_reset(GPIOA, GPIO_PIN_11);
    }
    else if(led == HAL_LED0)
    {
        gpio_bit_reset(GPIOA, GPIO_PIN_12);
    }
    else if(led == HAL_LED_ALL)
    {
        gpio_bit_reset(GPIOA, GPIO_PIN_11);
        gpio_bit_reset(GPIOA, GPIO_PIN_12);
    }
}

void hal_led_toggle(U8 led)
{
    if(led == HAL_LED0)
    {
        if(RESET == gpio_input_bit_get(GPIOA, GPIO_PIN_11))
        {
            gpio_bit_set(GPIOA, GPIO_PIN_11);
        }
        else
        {
            gpio_bit_reset(GPIOA, GPIO_PIN_11);
        }
    }
    else if(led == HAL_LED0)
    {
        if(RESET == gpio_input_bit_get(GPIOA, GPIO_PIN_12))
        {
            gpio_bit_set(GPIOA, GPIO_PIN_12);
        }
        else
        {
            gpio_bit_reset(GPIOA, GPIO_PIN_12);
        }
    }
    else if(led == HAL_LED_ALL)
    {
        if(RESET == gpio_input_bit_get(GPIOA, GPIO_PIN_11))
        {
            gpio_bit_set(GPIOA, GPIO_PIN_11);
        }
        else
        {
            gpio_bit_reset(GPIOA, GPIO_PIN_11);
        }

        if(RESET == gpio_input_bit_get(GPIOA, GPIO_PIN_12))
        {
            gpio_bit_set(GPIOA, GPIO_PIN_12);
        }
        else
        {
            gpio_bit_reset(GPIOA, GPIO_PIN_12);
        }
    }
}
